﻿#define _CRT_SECURE_NO_WARNINGS 1

//一、版本控制器Git



//注意：git是一个具有网络功能的版本控制器，且其客户端和服务的是一体的

//1.1版本控制器

//为了能够更方便我们管理这些不同版本的文件，便有了版本控制器。所谓的版本控制器，就是能让你
//了解到一个文件的历史，以及它的发展过程的系统。通俗的讲就是一个可以记录工程的每一次改动和
//版本迭代的一个管理系统，同时也方便多人协同作业。
//目前最主流的版本控制器就是Git。Git可以控制电脑上所有格式的文件，例如doc、excel、dwg、
//dgn、rvt等等。对于我们开发⼈员来说，Git最重要的就是可以帮助我们管理软件开发项目中的源代码
//文件


//1.2git简史

//同生活中的许多伟大事物一样，Git诞生于一个极富纷争大举创新的年代
//Linux内核开源项⽬有着为数众多的参与者。绝大多数的Linux内核维护工作都花在了提交补丁和保
//存归档的繁琐事务上（1991−2002年间）。到2002年，整个项⽬组开始启⽤⼀个专有的分布式版本
//控制系统BitKeeper来管理和维护代码
//到了2005年，开发BitKeeper的商业公司同Linux内核开源社区的合作关系结束，他们收回了Linux
//内核社区免费使⽤BitKeeper的权力。这就迫使Linux开源社区（特别是Linux的缔造者Linus
//Torvalds）基于使⽤BitKeeper时的经验教训，开发出⾃⼰的版本系统。他们对新的系统制订了若⼲
//目标：
//• 速度
//• 简单的设计
//• 对非线性开发模式的强⼒支持（允许成千上万个并⾏开发的分⽀）
//• 完全分布式
//• 有能⼒⾼效管理类似Linux内核一样的超大规模项目（速度和数据量）
//自诞生于2005年以来，Git日臻成熟完善，在高度易⽤的同时，仍然保留着初期设定的⽬标。它的速
//度飞快，极其适合管理大项目，有着令人难以置信的非线性分支管理系统

//1.3安装git

//安装命令行：
//ubuntu：apt install git
//centos：yum install git

//查看是否下载成功
//git --version

//1.4下载项目到本地

//创建好一个放置代码的目录
//git clone [远程仓库的地址]

//1.5git三板斧

//（1）git add将代码放到刚才下载好的目录中：git add .[或者文件名字]
//注意：将需要用git管理的文件告知git，最后的"."表示当前目录，
//（2）git commit提交改动到本地:git commit -m "提交信息"
//注意：提交的时候应该注明提交日志, 描述改动的详细内容，且-m不能去掉
//（3）git push同步到远端服务器上：git push
//注意：需要填入用户名密码。同步成功后,刷新Github页面就能看到代码改动了

//1.6查看历史提交记录

//git log就可以查看历史提交记录

//1.7查看提交状态

//git status可以查看提交状态

//二、调试器-gdb/cgdb使用

//2.1背景

//(1)程序的发布方式有两种， debug 模式和 release 模式，Linux gcc/g++ 出来的二进制程序，默认是release模式。
//(2)要使用gdb调试，必须在源代码生成二进制程序的时候, 加上-g选项，如果没有添加，程序无法被编译

//注意：gcc编译方式发布得默认是release版本,无法直接进行调试，可以使用readelf -S查看debug的信息

//2.2常见使用

//• 开始： gdb 调试文件名字
//• 退出： ctrl + d 或 quit 调试命令

 //命令                        作用                                样例
//list/l             显示源代码，从上次位置开始，每次列出10行   list/l 10
//list/l 函数名         列出指定函数的源代码                    list/l main
//list/l 文件名:行号    列出指定文件的源代码                list/l mycmd.c:1
//r/run                 从程序开始连续执行                         run/r
//n/next             单步执行，不进入函数内部，逐过程F10         next/n
//s/step             单步执行，进入函数内部, 逐语句F11           step/s
//break/b[文件名:]行号     在指定行号设置断点             break 10/break test.c:10/b 10
//break / b 函数名         在函数开头设置断点                     break main
//info break/b           查看当前所有断点的信息               info break/info b
//finish                执行到当前函数返回，然后停止                finish
//print/p 表达式            打印表达式的值                   print start + end
//p 变量                 打印指定变量的值                          p x
//display 变量名   跟踪显示指定变量的值（每次停止时都显示要跟踪的变量） display x
//set var 变量 = 值       修改变量的值                       set var i = 10
//continue/c         从当前位置开始连续执行程序                 continue
//delete/d breakpoints       删除所有断点                     delete breakpoints
//delete/dbreakpoints n  删除序号为n的断点                   delete breakpoints 1
//disable breakpoints   禁用所有断点                        disable breakpoints
//enable breakpoints      启用所有断点                       enable breakpoints
//info /i breakpoints  查看当前设置的断点列表                 info breakpoints
//undisplay 编号    取消对指定编号的变量的跟踪显示               undisplay 1
//until X行号               执行到指定行号                        until 20
//backtrace/bt       查看当前执行栈的各级函数调用及参数           backtrace
//info/i locals           查看当前栈帧的局部变量值             info locals
//quit                      退出gdb调试器                           quit